package net.wangy.basiccode1.jihe.map;

import org.junit.Test;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * Map:
 * Collection 中的集合称为单列集合， Map 中的集合称为双列集合。
 * 需要注意的是， Map 中的集合不能包含重复的键，值可以重复；每个键只能对应一个值。
 *
 * HashMap：存储数据采用的哈希表结构，元素的存取顺序不能保证一致。
 *  由于要保证键的唯一、不重复，需要重写键的hashCode()方法、equals()方法。
 *
 * LinkedHashMap：HashMap下有个子类LinkedHashMap，存储数据采用的哈希表结构+链表结构。通过链
 * 表结构可以保证元素的存取顺序一致；通过哈希表结构可以保证的键的唯一、不重复，需要重写键的
 * hashCode()方法、equals()方法。
 *
 * Map接口中的常用方法:
 *      public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。
 *      public V remove(Object key) : 把指定的键 所对应的键值对元素 在Map集合中删除，返回被删除元素的值。
 *      public V get(Object key) 根据指定的键，在Map集合中获取对应的值。
 *      public Set<K> keySet() : 获取Map集合中所有的键，存储到Set集合中。
 *      public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
 *
 * 如果要保证map中存放的key和取出的顺序一致，可以使用 java.util.LinkedHashMap 集合来存放。
 *
 */
public class AboutMapOne {
    //map的遍历实例，键找值方式：
    public static void main(String[] args) {
        HashMap<String,String> map=new HashMap<>();
        //添加元素到集合
        map.put("猪","猪他妈生的");
        map.put("人","人他妈生的");
        map.put("苟","苟他妈生的");
        map.put("你","你他妈生的");

        //获取所有的键 获取键集
        Set<String> keySet = map.keySet();
        for (String key : keySet) {
            String value = map.get(key);
            System.out.println(key+"“是”"+value);
        }
    }

//    Map集合遍历键值对方式
    @Test
    public void foreachMapByEntry(){

        // 创建Map集合对象
        HashMap<String, String> map = new HashMap<String,String>();
// 添加元素到集合
        map.put("胡歌", "霍建华");
        map.put("郭德纲", "于谦");
        map.put("薛之谦", "大张伟");

        // 获取 所有的 entry对象 entrySet
        Set<Map.Entry<String, String>> entrySet = map.entrySet();
        for (Map.Entry<String, String> entry : entrySet) {
            System.out.println(entry.getKey()+"的情人是"+entry.getValue());
        }
    }
}
